Dans ce tutoriel je vais vous montrer comment déplacer un objet avec le clavier suivant la position de la caméra.
Contrôles relatifs à la caméra ?
La direction de votre objet est calculée en fonction de la position de la caméra.(Mario 64, Uncharted, GTA 3, etc.).
Exemple : Si j'appuis sur le bouton droit le personnage va aller vers la droite de mon écran.
Comment faire un contrôle relatif ?
- Récupérer les informations du clavier
- Créer un vecteur de direction
- Déplacer l'objet en fonction du vecteur entre chaque frame
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
// Assigner 4 booléens pour chaque touche
var keyUp = false; var keyDown = false; var keyLeft = false; var keyRight = false; // Ajouter une écouteur d'événement clavier pour une touche pressée sur la scène stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey); function pressKey(pEvent) { // If an arrow key is down, switch the value to true to the assigned variable // Si une touche est enfoncée, changer la valeur du boolean (true) assignée pour la touche correspondante if (pEvent.keyCode == 38) { keyUp = true; } else if (pEvent.keyCode == 40) { keyDown = true; } else if (pEvent.keyCode == 37) { keyLeft = true; } else if (pEvent.keyCode == 39) { keyRight = true; } } // Assigner 4 booléens pour chaque touche var keyUp = false; var keyDown = false; var keyLeft = false; var keyRight = false; // Ajouter une écouteur d'événement clavier pour une touche pressée sur la scène stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey); function pressKey(pEvent) { // Si une touche est enfoncée, changer la valeur du boolean (true) assignée pour la touche correspondante if (pEvent.keyCode == 38) { keyUp = true; } else if (pEvent.keyCode == 40) { keyDown = true; } else if (pEvent.keyCode == 37) { keyLeft = true; } else if (pEvent.keyCode == 39) { keyRight = true; } } // Assigner la vitesse de l'objet var speed = 6; // Ajouter un écouteur d'événement entre chaque frame sur l'objet myCircle.addEventListener(Event.ENTER_FRAME, circleEnterFrame); function circleEnterFrame(pEvent) { // Créer et initialiser un vecteur 2D var vector = new Point(0,0); if (keyUp) { //Si la touche Haut est enfoncée assigner une nouvelle valeur au vecteur sur y vector.y += -1; } if (keyDown) { // Si la touche Bas est enfoncée assigner une nouvelle valeur au vecteur sur y vector.y += 1; } if (keyLeft) { // Si la touche Gauche est enfoncée assigner une nouvelle valeur au vecteur sur x vector.x += -1; } if (keyRight) { // Si la touche Right est enfoncée assigner une nouvelle valeur au vecteur sur x vector.x += 1; } // Calculer l'angle en radian formé par le vecteur de vitesse var angle = Math.atan2(vector.y,vector.x); // Si la taille du vecteur n'est pas nul if (vector.length > 0) { // Déplacer l'objet en fonction de l'angle formé et de la vitesse pEvent.currentTarget.x += Math.cos(angle) * speed; pEvent.currentTarget.y += Math.sin(angle) * speed; } } |
Télécharger la source : www.benoitfreslon.com-Move-an-objet-with-keyboard-with-camera-relative-control.zip